#include "pro1_win1_userlogin.h"

static char txt_user[128] = {0};     /* 用户名 */
static char txt_password[128] = {0}; /* 密码 */

/* 获取当前活动屏幕的宽高 */
#define scr_act_width() lv_obj_get_width(lv_scr_act())
#define scr_act_height() lv_obj_get_height(lv_scr_act())

static lv_obj_t *keyboard;          /* 键盘 */
static lv_obj_t *label_name;        /* 用户名正误提示标签 */
static lv_obj_t *label_pass;        /* 密码正误提示标签 */
static const lv_font_t *font;       /* 定义字体 */

static int name_flag = 0;
static int pass_flag = 0;

lv_obj_t *win1 = NULL;


/**
 * @brief  用户名文本框事件回调
 * @param  *e ：事件相关参数的集合，它包含了该事件的所有数据
 * @return 无
 */
static void PRO1_WIN1_NameTextAreaEventCB(lv_event_t *e)
{
    lv_event_code_t code = lv_event_get_code(e); /* 获取事件类型 */
    lv_obj_t *target = lv_event_get_target(e);   /* 获取触发源 */

    if (code == LV_EVENT_FOCUSED) /* 事件类型：被聚焦 */
    {
        lv_label_set_text(label_name, ""); /* 点击文本框后，提示词消失 */
        lv_label_set_text(label_pass, "");

        lv_obj_clear_flag(keyboard, LV_OBJ_FLAG_HIDDEN); /* 将隐藏键盘的重新显示 */
        lv_keyboard_set_textarea(keyboard, target);      /* 关联用户名文本框和键盘 */
    }

    else if (code == LV_EVENT_DEFOCUSED) /* 事件类型：未被聚焦 */
    {
        lv_obj_add_flag(keyboard, LV_OBJ_FLAG_HIDDEN); /* 隐藏键盘 */
    }

    else if (code == LV_EVENT_VALUE_CHANGED) /* 事件类型：文本框的内容发生变化 */
    {
        strcpy (txt_user ,lv_textarea_get_text(target)); /* 获取文本框的文本 */
    }
}

/**
 * @brief  密码文本框事件回调
 * @param  *e ：事件相关参数的集合，它包含了该事件的所有数据
 * @return 无
 */
static void PRO1_WIN1_PasswaordTextAreaEventCB(lv_event_t *e)
{
    lv_event_code_t code = lv_event_get_code(e); /* 获取事件类型 */
    lv_obj_t *target = lv_event_get_target(e);   /* 获取触发源 */

    if (code == LV_EVENT_FOCUSED) /* 事件类型：被聚焦 */
    {
        lv_label_set_text(label_name, ""); /* 点击文本框后，提示词消失 */
        lv_label_set_text(label_pass, "");

        lv_obj_clear_flag(keyboard, LV_OBJ_FLAG_HIDDEN); /* 将隐藏键盘的重新显示 */
        lv_keyboard_set_textarea(keyboard, target);      /* 关联用户名文本框和键盘 */
    }

    else if (code == LV_EVENT_DEFOCUSED) /* 事件类型：未被聚焦 */
    {
        lv_obj_add_flag(keyboard, LV_OBJ_FLAG_HIDDEN); /* 隐藏键盘 */
    }

    else if (code == LV_EVENT_VALUE_CHANGED) /* 事件类型：文本框的内容发生变化 */
    {
        strcpy(txt_password , lv_textarea_get_text(target)); /* 获取文本框的文本 */
    }
}
/**
 * @brief  按钮登录
 * @param  *e ：事件相关参数的集合，它包含了该事件的所有数据
 * @return 无
 */
static void PRO1_WIN1_LoginBtnEventCB(lv_event_t *e)
{
    lv_event_code_t code = lv_event_get_code(e); /* 获取事件类型 */
    // lv_obj_t *target = lv_event_get_target(e);                             /* 获取触发源 */

    if (code == LV_EVENT_CLICKED) /* 事件类型：文本框的内容发生变化 */
    {
        if (net_comm_logo == 1)
        {
            char str[255] = {0};
            sprintf(str, "%s,%s", txt_user, txt_password);
            if (RDWR_login(str) == 1) /* 判断密码是否正确 */
            {
                lv_obj_del(win1);
                win3_user_face(); // 跳转到支付界面
            }
            else
            {
                lv_label_set_text(label_name, LV_SYMBOL_CLOSE); /* 密码错误，显示X*/
                lv_obj_set_style_text_color(label_name, lv_color_hex(0xff0000), LV_PART_MAIN);

                lv_label_set_text(label_pass, LV_SYMBOL_CLOSE); /* 密码错误，显示X*/
                lv_obj_set_style_text_color(label_pass, lv_color_hex(0xff0000), LV_PART_MAIN);
            }
        }
    }
}

/**
 * @brief  用户登录界面1
 * @param  无
 * @return 无
 */
void PRO1_WIN1_UserLogin(void)
{
    pthread_t net_pt;
    pthread_create(&net_pt, NULL, NET_comm, NULL);
    /* 根据屏幕大小设置字体 */
    if (scr_act_width() <= 320)
    {
        font = &lv_font_montserrat_12;
    }
    else if (scr_act_width() <= 480)
    {
        font = &lv_font_montserrat_14;
    }
    else
    {
        font = &lv_font_montserrat_16;
    }

    /* 中文字体设置 */
    lv_font_t * font_hz = lv_freetype_font_create("/home/gec/samba_share/001__lv_port_linux_ubuntu_sdl/my_project/Data/simkai.ttf",
                                               LV_FREETYPE_FONT_RENDER_MODE_BITMAP,
                                               26,
                                               LV_FREETYPE_FONT_STYLE_NORMAL);
    if(!font_hz) {
        LV_LOG_ERROR("freetype font create failed.");
        return;
    }

    /*Create style with the new font*/
    static lv_style_t style;
    lv_style_init(&style);
    lv_style_set_text_font(&style, font_hz);
    lv_style_set_text_align(&style, LV_TEXT_ALIGN_CENTER);


    /* 界面1 */
    win1 = lv_obj_create(lv_scr_act());      
    lv_obj_set_size(win1, scr_act_width()*0.5, scr_act_height()*0.9);   
    lv_obj_align(win1, LV_ALIGN_CENTER, 0, 0);

    /* 用户登录头像 */
    lv_obj_t * img = lv_image_create(win1);
    lv_image_set_src(img, "A:my_data/用户图像2.png");
    lv_obj_align(img, LV_ALIGN_CENTER, 0, -scr_act_height() *0.3);

    /* 用户登录标签 */
    lv_obj_t* label_login = lv_label_create(win1);                                                  /* 定义并创建标签 */
    lv_obj_add_style(label_login, &style, 0);                                                       /* 设置字体 */
    lv_label_set_text(label_login, "用户登录");                                                      /* 设置标签文本 */
    lv_obj_align(label_login, LV_ALIGN_CENTER, 0, -scr_act_height() *0.15);                         /* 设置标签位置 */


    /* 用户名文本框 */
    lv_obj_t *textarea_name = lv_textarea_create(win1);                                             /* 创建文本框 */
    lv_obj_set_size(textarea_name, scr_act_width()*0.35, scr_act_height() *0.12);                   /* 设置宽度 */
    lv_obj_set_style_text_font(textarea_name, font, LV_PART_MAIN);                                  /* 设置字体 */
    lv_obj_align(textarea_name, LV_ALIGN_CENTER, 0, 0 );                                            /* 设置位置 */
    lv_textarea_set_one_line(textarea_name, true);                                                  /* 设置单行模式 */
    lv_textarea_set_max_length(textarea_name, 6);                                                   /* 设置输入字符的最大长度 */
    lv_textarea_set_placeholder_text(textarea_name, "user name");                                   /* 设置占位符 */
    lv_obj_add_event_cb(textarea_name, PRO1_WIN1_NameTextAreaEventCB, LV_EVENT_ALL, NULL);          /* 添加文本框事件回调 */

    /* 用户名正误提示标签 */
    label_name = lv_label_create(win1);                                                             /* 创建标签 */
    lv_label_set_text(label_name, "");                                                              /* 默认不提示 */
    lv_obj_set_style_text_font(label_name, font, LV_PART_MAIN);                                     /* 设置字体 */
    lv_obj_align_to(label_name, textarea_name, LV_ALIGN_OUT_RIGHT_MID, 5, 0);                       /* 设置位置 */

    /* 密码文本框 */
    lv_obj_t *textarea_pass = lv_textarea_create(win1);                                             /* 创建文本框 */
    lv_obj_set_size(textarea_pass, scr_act_width()*0.35, scr_act_height() *0.12);                   /* 设置宽度 */
    lv_obj_set_style_text_font(textarea_pass, font, LV_PART_MAIN);                                  /* 设置字体 */
    lv_obj_align_to(textarea_pass, textarea_name, LV_ALIGN_OUT_BOTTOM_MID, 0, scr_act_height()/20); /* 设置位置 */
    lv_textarea_set_one_line(textarea_pass, true);                                                  /* 设置单行模式 */
    lv_textarea_set_password_mode(textarea_pass, true);                                             /* 设置密码模式 */
    lv_textarea_set_password_show_time(textarea_pass, 1000);                                        /* 设置密码显示时间 */
    lv_textarea_set_max_length(textarea_pass, 8);                                                   /* 设置输入字符的最大长度 */
    lv_textarea_set_placeholder_text(textarea_pass, "password");                                    /* 设置占位符 */
    lv_obj_add_event_cb(textarea_pass, PRO1_WIN1_PasswaordTextAreaEventCB, LV_EVENT_ALL, NULL);     /* 添加文本框事件回调 */


    if (name_flag == 1 && pass_flag == 1)
    {
        lv_textarea_set_placeholder_text(textarea_name, "ok"); 
        lv_textarea_set_placeholder_text(textarea_pass, "ok");
    }
    

    /* 密码正误提示标签 */
    label_pass = lv_label_create(win1);                                                             /* 创建标签 */
    lv_label_set_text(label_pass, "");                                                              /* 默认不提示 */
    lv_obj_set_style_text_font(label_pass, font, LV_PART_MAIN);                                     /* 设置字体 */
    lv_obj_align_to(label_pass, textarea_pass, LV_ALIGN_OUT_RIGHT_MID, 5, 0);                       /* 设置位置 */

    /* 登录密码按钮 */
    lv_obj_t *btn_login = lv_btn_create(win1);                                                      /* 创建加速按钮 */
    lv_obj_set_size(btn_login, scr_act_width()*0.30, scr_act_height() *0.1);                        /* 设置按钮大小 */
    lv_obj_align_to(btn_login, textarea_pass, LV_ALIGN_OUT_BOTTOM_MID, 0, scr_act_height()/20);     /* 设置按钮位置 */
    lv_obj_add_event_cb(btn_login, PRO1_WIN1_LoginBtnEventCB, LV_EVENT_CLICKED, NULL);                         /* 设置按钮事件 */

    lv_obj_t* btn_label_login = lv_label_create(btn_login);                                         /* 创建减速按钮标签 */
    lv_obj_add_style(btn_label_login, &style, 0);                                                   /* 设置字体 */
    lv_label_set_text(btn_label_login, "登录");                                                     /* 设置标签文本 */
    lv_obj_set_align(btn_label_login,LV_ALIGN_CENTER);                                              /* 设置标签位置 */

    /* 键盘 */
    keyboard = lv_keyboard_create(lv_scr_act());                                                    /* 创建键盘 */
    lv_obj_set_size(keyboard, scr_act_width(), scr_act_height()/2);                                 /* 设置大小 */
    lv_obj_add_flag(keyboard, LV_OBJ_FLAG_HIDDEN);                                                  /* 隐藏键盘 */
                                                                            /* 删除键盘 */
}
